<?php


class CatalogosController extends AppController 
{
	public $uses = array('Catalogo','Articulo','TipoArticulo','Sede','TipoDisponibilidad','Tienda');	
	public $bandera = true;
	
	#---------------------------------------------------#
	#---------------Funciones Principales---------------#
	#---------------------------------------------------#
	public function index()
	{
		$this->layout = 'default_ini';	  
	}
	
	public function assign_articulo()
	{
		$this->layout = 'default_ini';	
		$this->infoCatalogo(0);
		if($this->request->is('post') || $this->request->is('put'))
		{
			$this->asignar_articulo_catalogo();
			
		}
	}
	
	public function consult_catalogo()
	{
		$this->layout = 'default_ini';	
			
		$this->llenar_combobox_tipo_articulo(1);
		
	}
	
	public function consult_catalogo1($id_tipo_articulo,$nombre_articulo)
	{
		$this->layout = 'default_ini';	
		if ($id_tipo_articulo == "")
		{
			$this->setMessageFlash(2, 'Error id_tipo_articulo', null);
		}
		elseif ($nombre_articulo == "")
		{
			$this->setMessageFlash(2, 'Error nombre_articulo', null);
		}
		else 
		{		
			$this->getConsult_Catalogo($id_tipo_articulo,$nombre_articulo);
			
			if($this->request->is('post') || $this->request->is('put'))
			{
				$this->postConsultCatalogo();
			}
		}
		
	
	}
	
	public function edit_catalogo($id_catalogo)
	{
		$this->layout = 'default_ini';	
		if (!$id_catalogo)
		{
			$this->setMessageFlash(2,'Error id_catalogo', null);
		}
		else 
		{
			$this->getDetail_Info_Catalogo($id_catalogo);
			
			if($this->request->is('post') || $this->request->is('put'))
			{
				
				$this->postEditCatalogo();
			}
		}
		
	}
	
	public function detalle_catalogo($id_catalogo)
	{
		$this->layout = 'default_ini';	
		if (!$id_catalogo)
		{
			$this->setMessageFlash(2, 'Error id_catalogo', null);
		}
		else
		{
			$this->getDetail_Info_Catalogo($id_catalogo);
		}
		
	}
	
	public function delete_catalogo($id_catalogo,$id_val = null)
	{
		if (!$id_catalogo)
		{
			$this->setMessageFlash(2, 'Error $id_catalogo null', null);
		}
		elseif (!$id_val)
		{
			$this->setMessageFlash(2, 'Error id_val null', null);
		}
		else
		{
			if ($id_val == 1)
			{
				if($this->delete_single_articulo($id_catalogo))
				{
					$this->setMessageFlash(1, 'Se Borro el articulo del catalogo satisfactoriamente.', null);
				}
				else 
				{
					$this->setMessageFlash(2, 'No se pudo borrar el articulo del catalogo.', null);
				}
			}
			elseif ($id_val == 2) 
			{
					
				if ($this->length_arreglo_catalogo($id_catalogo) > 2)
				{
					$this->delete_multiples_articulo($id_catalogo);
				}
				elseif ($this->length_arreglo_catalogo($id_catalogo) == 2) 
				{
					$catalogo = explode(',', $id_catalogo);
					if($this->delete_single_articulo($catalogo[1]))
					{
						$this->setMessageFlash(1, 'Se Borro el articulo del catalogo satisfactoriamente.', null);
					}
					else 
					{
						$this->setMessageFlash(2, 'No se pudo borrar el articulo del catalogo.', null);
					}
				}
			}
			else 
			{
				$this->setMessageFlash(2, 'Error id_val', null);
			}
		}
	}
	
	#---------------------------------------------------#
	#---------------Funciones Secundarias---------------#
	#---------------------------------------------------#
	
	private function setMessageFlash($id,$mensaje,$nombre_mensaje)
	{
		if (is_null($nombre_mensaje))
		{
			$nombre_mensaje = 'flash';
		}
		switch ($id) 
		{
			case 1: // mensaje bueno
				$this->Session->setFlash($mensaje,'default',array('class'=>'success'),$nombre_mensaje);
				break;
			case 2: // mensaje malo
				$this->Session->setFlash($mensaje,'default',array('class'=>'error-message'),$nombre_mensaje);
				break;
			case 3: // mensaje cuidado
				$this->Session->setFlash($mensaje,'default',array('class'=>'notice'),$nombre_mensaje);
				
				break;
			
			default:
				
				break;
		}
	}
	
	public function getDetalleCatalogo($id_catalogo)
	{
		$this->layout = false;
		if ($this->request->is('get')) 
		{
			$this->getDetail_Info_Catalogo($id_catalogo);
			$this->render('/Elements/GetDetalleCatalogo');
		}
	}
	
	public function getEditCatalogo($id_catalogo,$error = null)
	{
		$this->layout = false;
		
		if ($this->request->is('get')) 
		{
			$this->getDetail_Info_Catalogo($id_catalogo);
			if ($error)
			{
				$this->set('errors',$this->parserError($error));	
			}
			else
			{
				$this->set('errors',null);	
			}
			$this->render('/Elements/GetEditCatalogo');
		}
		elseif ($this->request->is('post') || $this->request->is('put') )
		{
		
			$info_catalogo = array( 
										'Catalogo'=> array(
															'id' => $this->request->data['id'],
															'cantidad_disponible' => $this->request->data['cantidad_disponible'],
															'precio_unitario_articulo' => $this->request->data['precio_unitario_articulo'],
														) 
										
									);
			$this->postEditCatalogo($info_catalogo);
		}
		
	}
	
	public function getGridConsultCatalogo($id_tipo_articulo,$nombre_articulo)
	{
		
		$this->layout = false;
		if ($this->request->is('get')) 
		{
			$this->busqueda_articulo($id_tipo_articulo, $nombre_articulo);
			$this->render('/Elements/GridConsultCatalogo');
		}
		
	}
	
	private function asignar_articulo_catalogo()
	{
			
		$precio_unitario = $this->request->data['Catalogo']['precio_unitario_articulo'];
		$cantidad_disponible = $this->request->data['Catalogo']['cantidad_disponible'];
		if($this->verificar_catalogo($precio_unitario, $cantidad_disponible))
		{
			if ($this->Catalogo->save($this->request->data))
			{
				$this->setMessageFlash(1, 'Se Asigno el Articulo al catalgo', null);
				$this->redirect($this->referer());	
			}
			else 
			{
				$this->setMessageFlash(2, 'No se pudo asignar el articulo', null);
			}
		}
		
		
	}
	
	/*private function llenar_combobox_tipo_moneda($id)
	{
		$tipo_monedas = $this->TipoMoneda->find('all');
		
		$arreglo = array();
		
		if ($id == 1)
		{
			array_push($arreglo, array(0 => 'Todos'));
		}
		foreach ($tipo_monedas as $tipo_moneda) 
		{
			array_push($arreglo,array($tipo_moneda['TipoMoneda']['id'] => $tipo_moneda['TipoMoneda']['nombre_moneda']." (".$tipo_moneda['TipoMoneda']['signo_moneda'].")"));
		}

		$this->set('tipomoneda',$arreglo);
	}*/
	
	private function llenar_combobox_tipo_articulo($id)
	{
		$tipo_articulos = $this->TipoArticulo->find('all');
		
		$arreglo = array();
		
		if ($id == 1)
		{
			array_push($arreglo, array(0 => 'Todos'));
		}
		foreach ($tipo_articulos as $tipo_articulo) 
		{
			array_push($arreglo, array($tipo_articulo['TipoArticulo']['id'] => $tipo_articulo['TipoArticulo']['nombre_tipo_articulo']));
		}

		$this->set('tipoarticulo',$arreglo);
	}
	
	private function eliminar_articulo_catalogo($id_catalogo)
	{
		$catalogo = $this->Catalogo->findAllById($id_catalogo);
		if ($catalogo)
		{
			try
			{
				$this->Catalogo->query('DELETE FROM catalogos WHERE id='.$id_catalogo);
				
				return true;
			}
			catch (Exception $ee)
			{
				
				return false;	
			}
			
		}
		else 
		{
			return false;		
		}
	}
	
	private function length_arreglo_catalogo($arreglo_catalogo)
	{
		$catalogos = explode(',', $arreglo_catalogo);
		return count($catalogos);
	}
	
	private function delete_single_articulo($id_catalogo)
	{
		return $this->eliminar_articulo_catalogo($id_catalogo);

	}
	
	private function delete_multiples_articulo($id_catalogo)
	{
		$catalogos = explode(',', $id_catalogo);
		
		$buenas = array();
		$malas = array();
		foreach ($catalogos as $catalogo) 
		{
			if($catalogo != "")
			{
				if($this->eliminar_articulo_catalogo($catalogo))
				{
					array_push($buenas,$catalogo);
				}
				else 
				{
					array_push($malas,$catalogo);
				}
			}
		}
		if ($buenas != null )
		{
			if ($malas != null)
			{
				$this->setMessageFlash(2, 'No se borraron todos articulos seleccionados del catalogo', null);
				return 3; // significa que varias se pudieron eliminar, otras no.
			}
			else 
			{
				$this->setMessageFlash(1, 'Se borraron los articulos del catalogo', null);
				return 1; // significa que todas se pudieron eliminar.
			}
		}
		else 
		{
			if ($malas != null)
			{
				$this->setMessageFlash(2, 'No Se borraron los articulos del catalogo', null);
				return 2; //significa que no se puedieron eliminar ninguna
			}
			else 
			{
				$this->setMessageFlash(2,'error al borrar', null);
				return 0; // error
			}
		}
	}
	
	private function postEditCatalogo($info_catalogo)
	{

		$this->Catalogo->create();
		$this->Catalogo->set($info_catalogo);
		
		$error = null;
		
		if ($this->Catalogo->validates()) 
		{
			if($this->Catalogo->save($info_catalogo))
			{
				
				$this->setMessageFlash(1, 'Se Guardo la Informacion en el Catalogo Satisfactoriamente', null);

			}
			else 
			{
				$this->setMessageFlash(2, 'No se Guardo la Informacion en el Catalogo', null);	
					
			}
		}
		else 
		{
		    $this->setMessageFlash(2, 'No se guardo los cambios de la Catalogo',null);
			
			$error = $this->getErrors( $this->Catalogo->validationErrors);
		}
		
		$this->redirect(array(
									'controller' => 'Catalogos',
									'action' => 'getEditCatalogo',$this->Catalogo->id,$error
							   )
						 );	
		
	}
	
	private function postConsultCatalogo()
	{
		$id_tipo_catalogo = $this->request->data['Consult_Catalogo']['tipo_catalogo_id'];
		$nombre_articulo_busq =$this->request->data['Consult_Catalogo']['nombre_articulo_busq'];
		
		if ($nombre_articulo_busq == NULL)
		{
			$nombre_articulo_busq = "*";
		}
		
		$this->redirect(array('action' => 'consult_catalogo',$id_tipo_catalogo,$nombre_articulo_busq));

		
		
	}
	
	private function getDetail_Info_Catalogo($id_catalogo)
	{
		$this->infoCatalogo($id_catalogo);
		
	}
	
	private function getConsult_Catalogo($id_tipo_articulo,$nombre_articulo)
	{
		$this->llenar_combobox_tipo_articulo(1);
		
		
		$this->busqueda_articulo($id_tipo_articulo, $nombre_articulo);
		
		
	}
	
	private function busqueda_articulo($id_tipo_articulo,$nombre_articulo)
	{
		
		$strquery = 'SELECT * 
						FROM tiendas T, catalogos C, 
						tipo_disponibilidads TD,
						articulos A, tipo_articulos TA
						WHERE T.id = C.tienda_id 
						AND TD.id = C.tipo_disponibilidad_id
						AND A.id = C.articulo_id
						AND TA.id = A.tipo_articulo_id
						AND A.status_articulo = TRUE';
						
		if ($id_tipo_articulo != 0)
		{
			$strquery = $strquery .' AND TA.id = '.$id_tipo_articulo;
		}
		if ($nombre_articulo != "*")
		{
			$strquery = $strquery.' AND A.nombre_articulo LIKE "%'.$nombre_articulo.'%"';
		}
		
		
		$strquery = $strquery . ' ORDER BY C.id ASC ';
		
		$catalogos = $this->Catalogo->query($strquery);
		
		$this->set('catalogos',$catalogos);
		
		$this->set('id_tipo_articulo',$id_tipo_articulo);
		$this->set('nombre_articulo',$nombre_articulo);
	
	}
	public function parserError($error)
	{
		$array_error = array();	
			
		$string_error = explode('|', $error);
		
		for ($i = 0; $i < count($string_error); $i++)
		{
			if ($i != 0)
			{
				$string_problema = explode('++',$string_error[$i]);
					
				array_push($array_error,array(
												'campo' => $string_problema[0],
												'error' => $string_problema[1],
												)
							);
			}
			
		}
		return $array_error;
	}
	public function getErrors($errors)
	{
		$errores_view = '';
		
		if (array_key_exists('cantidad_disponible', $errors))
		{
			$errores_view = $errores_view .'|'.'Cantidad Maxima de Pedido'.'++'.$errors['cantidad_disponible'][0];
		}
		if (array_key_exists('precio_unitario_articulo', $errors))
		{
			$errores_view = $errores_view .'|'.'Precio Unitario del Articulo'.'++'.$errors['precio_unitario_articulo'][0];
		}

		return $errores_view;
		
		
	}
	private function verificar_catalogo($precio_unitario, $cantidad_disponible)
	{
		debug($precio_unitario.' '.$cantidad_disponible);
		if(is_null($precio_unitario))
		{
			$this->setMessageFlash(2, 'El Precio Unitario no puede ser null', null);
			return false;
			
		}
		elseif (is_null($cantidad_disponible)) 
		{
			$this->setMessageFlash(2, 'La Cantidad Necesaria no puede ser null', null);
			return false;
		}
		elseif (!is_numeric($precio_unitario))
		{
			$this->setMessageFlash(2, 'El Precio Unitario debe ser numero', null);
			return false;
		}	
		elseif (!is_numeric($cantidad_disponible))
		{
			$this->setMessageFlash(2, 'La Cantidad debe ser numero', null);
			return false;
		}
		elseif ($precio_unitario < 0)
		{
			$this->setMessageFlash(2, 'El Precio Unitario tiene que ser mayor que 0', null);
			return false;
		}
		elseif ($cantidad_disponible < 0)
		{
			$this->setMessageFlash(2, 'La Cantidad tiene que ser mayor que 0', null);
			return false;
		}
		else
		{
			return true;
		}
	}
	
	private function llenar_combobox_sede($id)
	{
		$sedes = $this->Sede->find('all');
		
		
		$arreglo = array();
		
		if ($id == 1)
		{
			array_push($arreglo, array(0 => 'Todos'));
		}
		
		foreach ($sedes as $sede) 
		{
				array_push($arreglo,array($sede['Sede']['id'] => $sede['Sede']['nombre_sede']));
		}
		
		$this->set('sedes',$arreglo);

	}
	
	private function llenar_combobox_tienda($id)
	{
		$tiendas = $this->Tienda->find('all');
		

		$arreglo = array();
		if ($id == 1)
		{
			array_push($arreglo, array(0 => 'Todos'));
		}
		foreach ($tiendas as $tienda) 
		{
				array_push($arreglo, array( $tienda['Tienda']['id'] => $tienda['Tienda']['nombre_tienda']));
		}
		
		$this->set('tipo_tienda',$arreglo);
		
	}
	
	private function infoCatalogo($id_catalogo)
	{
		//$this->llenar_combobox_sede(2);
		$this->llenar_combobox_tienda(2);
		$Todos_Tipo_Articulo = $this->TipoArticulo->find('all');
		$Todos_Articulo = $this->Articulo->find('all');
		//$this->llenar_combobox_tipo_moneda(2);
		
		if($id_catalogo != 0)
		{
			$Todos_Catalogo = $this->Catalogo->query('SELECT * 
														FROM tiendas T, catalogos C, 
														tipo_disponibilidads TD,
														articulos A, tipo_Articulos TA
														WHERE T.id = C.tienda_id
														AND TD.id = C.tipo_disponibilidad_id
														AND A.id = C.articulo_id
														AND TA.id = A.tipo_articulo_id
														AND C.id = '.$id_catalogo);

			
			$arreglo_de_articulos ="";
			foreach ($Todos_Catalogo as $catalogo) 
			{
	
				$arreglo_de_articulos = $arreglo_de_articulos.','.$catalogo['C']['articulo_id'];
				
	
			}

			$this->set('arreglo_de_articulos',$arreglo_de_articulos);
			
			
		}
		else 
		{
			$Todos_Catalogo = $this->Catalogo->find('all');
			$Todos_Articulo = $this->Articulo->query('SELECT * 
														FROM articulos A
														WHERE A.id NOT 
														IN (SELECT articulo_id
															FROM catalogos)');
														
		}
		
		
	
										
		$this->set('Todos_Tipo_Articulos',$Todos_Tipo_Articulo);
		$this->set('Todos_Articulos',$Todos_Articulo);
		$this->set('Todos_Catalogos',$Todos_Catalogo);
		

	}
	
}

?>